小当家ISV
互联网高新技术服务商

全球共有10多个国家和地区1000多个平台,20万+商户使用

C#过滤器(Filter)

作者:    陈发林       发布时间:     2024-03-09          276      分类专栏: 后端开发

一.概述

过滤器(Filters)是用于在ASP.NET Core应用程序中执行全局或局部的操作的组件。这些过滤器可以用于处理请求前、请求后、异常处理等不同的阶段。

在 ASP.NET Core 中,过滤器是一种可以在特定的阶段处理请求的方法。它们在一个 action 方法执行之前或之后运行,可以用来处理错误、指定缓存设置、验证请求和响应,等等。

二.ASP.NET Core 提供的五种过滤器

1.授权过滤器(Authorization filters):处理授权逻辑。在过滤器管道中第一个执行,通常用于验证当前请求的合法性,不合法后面的管道会直接跳过。它们只有一个Before方法,不像其它大多数过滤器支持前置阶段方法和后置阶段方法。注意,您不要在授权过滤器中抛出异常,因为没有任何代码来处理异常(异常过滤器不处理它们)。

2.资源过滤器(Resource filters):在模型绑定之前和之后运行,通常用于缓存。

3.操作过滤器(Action filters):在 action 执行之前和之后运行。

4.异常过滤器(Exception filters):处理控制器或 action 中引发的异常。

5.结果过滤器(Result filters):在action 的结果执行之前和之后运行。

三.运行顺序(生命周期)aHR0cHM6Ly9pbWFnZXMyMDE1LmNuYmxvZ3MuY29tL2Jsb2cvMTYyMDkwLzIwMTcwNy8xNjIwOTAtMjAxNzA3MTYxMzA4MTU2NjAtMTI0OTQ5MTUyNy5wbmc.png

注:黃色箭头是正常情況流程;灰色箭头是异常处理流程;

四.使用

1.代码案例

    public class GlobalFiler: Attribute,IAuthorizationFilter

    {

        public void OnAuthorization(AuthorizationFilterContext context)

        {

            context.Result = new JsonResult("全局权限设置");

        }

    }

    public class MyFilter : Attribute,IActionFilter,IOrderedFilter

    {

        public int Order { get; set; }

        public void OnActionExecuted(ActionExecutedContext context)

        {

        }

        public void OnActionExecuting(ActionExecutingContext context)

        {

        }

    }

    //ActionFilterAttribute继承了Attribute、IActionFilter、IOrderedFilter等

    public class MyFilter2 : ActionFilterAttribute

    {

       public override void OnActionExecuting(ActionExecutingContext context)

        {

            //如果失败,页面提示 

            context.Result = new JsonResult("MyFilter2设置,无权限访问");

        }

    }

2.过滤器注册,分为两种:全局注册和用Attribute区域注册,用在特定Action上。

  1).全局注册Startup.cs

        public void ConfigureServices(IServiceCollection services)

        {

            services.AddMvc(config => config.Filters.Add(new GlobalFiler()));

        }

  2).区域注册

    [Route("api/[controller]")]

    [MyFilter(Order = 1)]

    public class ValuesController : Controller

    {

        // GET api/values

        [HttpGet]

        [MyFilter2(Order = 0)]

        public IEnumerable<string> Get()

        {

            return new string[] { "value1", "value2" };

        }

    }

所属分类: 后端开发
正确认识内存泄漏的危害
泛型、重载与CRUD的基础

小当家,帮您把生意越做越大!

小当家ISV,重庆APP开发,小程序开发,软件系统开发 地址:重庆市南岸区南坪万达广场写字楼2栋19-6 联系电话:023-81361879

ICP备案号:渝ICP备15003473-1 增值电信业务许可证: 渝B2-15003473 渝公网安备 50010802005103号

友情链接: 小当家点餐收银系统   MagicShop商城  重庆微信营销  重庆智能家居  重庆红岭医院 

重庆小当家互联网信息技术有限公司